package jmine.tec.hydra.dao;

import java.util.List;

import jmine.tec.hydra.domain.HydraSystem;
import jmine.tec.hydra.domain.specification.HydraScheduledSpecification;

import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import bancosys.tec.persist.dao.BaseDAO;
import bancosys.tec.persist.dao.BeanNotFoundException;
import bancosys.tec.persist.hibernate.RestrictionsUtils;

/**
 * DAO para {@link HydraScheduledSpecification}.
 * 
 * @author finx
 * @created Jan 4, 2011
 * @deprecated use jmine.tec.scheduling
 */
@Deprecated
public class HydraScheduledSpecificationDAO extends BaseDAO<HydraScheduledSpecification> {

    /**
     * Devolve a especificação para um dado sistema e uma dada ação.
     * 
     * @param action a ação.
     * @param system o sistema.
     * @return a especificação.
     * @throws BeanNotFoundException caso não encontre nenhuma.
     */
    public HydraScheduledSpecification findByActionSystem(HydraSystem system, String action) throws BeanNotFoundException {
        Criteria crit = this.createCriteria();
        crit.add(Restrictions.eq("action", action));
        crit.add(Restrictions.eq("system", system));
        return this.executeSingleQuery(crit);
    }

    /**
     * Retorna as {@link HydraScheduledSpecification} associadas a acao {@link String} e ao sistema {@link HydraSystem} passados como
     * parâmetros.
     * 
     * @param action ação a ser pesquisada
     * @param system sistema a ser pesquisado
     * @return Lista de HydraScheduledSpecification associadas a ação e ao sistema passados como parâmetro.
     */
    public List<HydraScheduledSpecification> findBySystemActionLike(HydraSystem system, String action) {
        Criteria criteria = this.createCriteria();
        RestrictionsUtils.addRestrictionEqId(criteria, "system.id", system);
        if (action != null) {
            criteria.add(Restrictions.ilike("action", action, MatchMode.ANYWHERE));
        }
        return this.executeQuery(criteria);
    }

}
